// import com.alibaba.druid.DbType;
// import com.alibaba.druid.sql.ast.*;
// import com.alibaba.druid.sql.visitor.SQLASTVisitor;

// import java.util.Collections;
// import java.util.List;
#pragma once
#include <list>
#include "../../../sql/ast/SQLStatementImpl.h"
#include "../../../sql/ast/SQLReplaceable.h"

class SQLName;
class SQLASTVisitor;
class SQLObject;
class SQLExpr;
class DbType;

class SQLUseStatement :virtual public SQLStatementImpl ,virtual public SQLReplaceable {
  public:
    SQLName_ptr  database;

    SQLUseStatement() ;

    SQLUseStatement(DbType_ptr   dbType) ;
  SHAREDOBJECT(SQLUseStatement);

    SQLName_ptr  getDatabase() ;

    void setDatabase(SQLName_ptr  x) ;

    //@Override
    void accept0(SQLASTVisitor_ptr  visitor) ;

    //@Override
    BOOL_ptr replace(SQLExpr_ptr expr, SQLExpr_ptr target);

    //@Override
    SQLObject_list_ptr  getChildren() ;
  virtual SQLObject_ptr clone()
  {
    SQLObject_ptr clone_tmp = std::shared_ptr<SQLUseStatement>(new SQLUseStatement());
    std::shared_ptr<SQLUseStatement> x = std::dynamic_pointer_cast<SQLUseStatement>(clone_tmp);
    return x;
  }
};
